Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.03.2014, 17:24
Кандидат Javascript-наук
Отправить личное сообщение для fAmOus Посмотреть профиль Найти все сообщения от fAmOus
 
Регистрация: 10.07.2012
Сообщений: 105

Парсинг XML файла и создание массива
Всем привет.. я хочу сделать парсер xml файла и занесение тех данных в массив, но у меня получается кривой массив и я не могу вывести данные из него.
Собственно вот функция:
function loadingVariablesForNews(){
    console.log("сейчас активен режим новостей: "+$.cookie("_statViewLayer"));
    var num_pages = $NUM_PAGES$,
	num_entries = $NUM_ENTRIES$,
	current_page = '$CURRENT_PAGE$',
	current_page = current_page.replace(/<[^>]+>/g,'');
    var obj= {MATERIAL_ID:[],TITLE:[],MESSAGE:[],ENTRY_URL:[],CATEGORY_NAME:[],CATEGORY_URL:[],COMMENTS_NUM:[],COMMENTS_URL:[],USER_NAME:[],USER_ID:[],RATING:[],RATED:[],READS_NUM:[],RUNS_NUM:[],DATE:[],TIME:[],TIMESTAMP:[]};
    console.log("Всего страниц: $NUM_PAGES$");
    console.log("Всего материалов: $NUM_ENTRIES$");
    console.log("Текущая страница: "+current_page);
    for (i=1;i<=num_pages;i++){
	console.log(i);
	$.ajax({
	    type: "GET",
	    url: "//cs-portalik.at.ua/api/stuff/0-"+[i],
	    dataType: "xml",
	    success: function(data){
		$.each($(data).find("member"),function(){
		    var n = $(this).find("name").next().text(),
			o = $(this).find("name").text();
		    "MATERIAL_ID" == o && obj.MATERIAL_ID.push(n);
		    "TITLE" == o && obj.TITLE.push(n);
		    "MESSAGE" == o && obj.MESSAGE.push(n);
		    "ENTRY_URL" == o && obj.ENTRY_URL.push(n);
		    "CATEGORY_NAME" == o && obj.CATEGORY_NAME.push(n);
		    "CATEGORY_URL" == o && obj.CATEGORY_URL.push(n);
		    "COMMENTS_NUM" == o && obj.COMMENTS_NUM.push(n);
		    "COMMENTS_URL" == o && obj.COMMENTS_URL.push(n);
		    "USER_NAME" == o && obj.USER_NAME.push(n);
		    "USER_ID" == o && obj.USER_ID.push(n);
		    "RATING" == o && obj.RATING.push(n);
		    "RATED" == o && obj.RATED.push(n);
		    "READS_NUM" == o && obj.READS_NUM.push(n);
		    "RUNS_NUM" == o && obj.RUNS_NUM.push(n);
		    "DATE" == o && obj.DATE.push(n);
		    "TIME" == o && obj.TIME.push(n);
		    "TIMESTAMP" == o && obj.TIMESTAMP.push(n);
		});
		if(i-1==3){
		    console.log("LAST");
		    shablon = "";
		    console.log(obj.MATERIAL_ID);
		    console.log(obj.TITLE);
		    $.each(obj.MATERIAL_ID,function(e){
			if($.cookie("_statViewLayer")=='list'){
			    console.log(obj.TITLE[e]);
			}
			if($.cookie("_statViewLayer")=='block'){
			    shablon += "<div class='block default'><div class='bd'><div class='poster' style='background: url(/diablo3.png) no-repeat;'></div><div class='text'><h2>"+obj.TITLE[e]+"</h2><p>"+obj.MESSAGE[e]+"</p></div></div><ul class='info'><li class='time'><i>15 \u043c\u0438\u043d. \u043d\u0430\u0437\u0430\u0434<div>15 \u043c\u0438\u043d. \u043d\u0430\u0437\u0430\u0434</div></i></li><li class='comm' style='margin-left: 4px;float:right;'><i>\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432:<div>\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432:</div></i><i>237<div>237</div></i></li><li class='view' style='margin-left: 8px;float:right;'><i>\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u0432:<div>\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u0432:</div></i><i>190<div>190</div></i></li></ul></div>";
			}
		    });
		}
	    },
	    error: function(XMLHttpRequest, textStatus, errorThrown) {
		alert("Status: " + textStatus); alert("Error: " + errorThrown);
	    }
	});
    }
    $(".wrapContent .content").html(shablon);
}


На 39 строке я пытался определить последний цикл и выполнить действия, но почему-то "i" всегда был равен 3 или 4.. я просто в замешательстве..

Еще на 7 строке пытался сделать массив, но получилось криво.

Помогите исправить код и переработать массив примерно в такой вид:
material[nomer].TITLE - вывод
material[3].MATRIAL_ID - вывод
[1]:{TITLE:'название','MATERIAL_ID':'номер'}
[2]:{TITLE:'название','MATERIAL_ID':'номер'}
[3]:{TITLE:'название','MATERIAL_ID':'номер'}
[4]:{TITLE:'название','MATERIAL_ID':'номер'}

Что-то вроде того.. просто давно не занимался javascript и много чего забыл, а в поиске ничего не смог найти.

И кстати, в цикле вроде все присваивалось, но вывести в нем и после него я не мог.

Жду помощи, подсказок и критики
Ответить с цитированием
  #2 (permalink)  
Старый 20.03.2014, 17:32
Кандидат Javascript-наук
Отправить личное сообщение для fAmOus Посмотреть профиль Найти все сообщения от fAmOus
 
Регистрация: 10.07.2012
Сообщений: 105

Данные примерно такие:
<value>
<struct>
<member>
<name>MATERIAL_ID</name>
<value>
<i4>28</i4>
</value>
</member>
<member>
<name>TITLE</name>
<value>
<string>Fuse</string>
</value>
</member>
</struct>
</value>
Ответить с цитированием
  #3 (permalink)  
Старый 21.03.2014, 01:09
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

fAmOus, а API твое или чужое? Может у них есть JSON?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 21.03.2014, 01:41
Кандидат Javascript-наук
Отправить личное сообщение для fAmOus Посмотреть профиль Найти все сообщения от fAmOus
 
Регистрация: 10.07.2012
Сообщений: 105

danik.js, API ucoz, я тоже искал JSON но его у них нет..
Ответить с цитированием
  #5 (permalink)  
Старый 21.03.2014, 01:52
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от fAmOus
но почему-то "i" всегда был равен 3 или 4
Что ты несешь. У тебя i меняется от единицы до num_pages включительно. Вот жеж:
Сообщение от fAmOus
for (i=1;i<=num_pages;i++)
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 21.03.2014, 02:18
Кандидат Javascript-наук
Отправить личное сообщение для fAmOus Посмотреть профиль Найти все сообщения от fAmOus
 
Регистрация: 10.07.2012
Сообщений: 105

danik.js,
я выводил console.log(i+'=='+num_pages); и мне выдавало 4==3
Ответить с цитированием
  #7 (permalink)  
Старый 21.03.2014, 02:19
Кандидат Javascript-наук
Отправить личное сообщение для fAmOus Посмотреть профиль Найти все сообщения от fAmOus
 
Регистрация: 10.07.2012
Сообщений: 105

danik.js,
это не так важно, мне нужно другое
Ответить с цитированием
  #8 (permalink)  
Старый 21.03.2014, 02:33
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от fAmOus
я выводил console.log(i+'=='+num_pages); и мне выдавало 4==3
Ну так логично )) У тя же стоит проверка: if(i-1==3). Оно выполняется когда i равно четырем. Или ты арифметику первого класса не осилил?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #9 (permalink)  
Старый 21.03.2014, 03:59
Кандидат Javascript-наук
Отправить личное сообщение для fAmOus Посмотреть профиль Найти все сообщения от fAmOus
 
Регистрация: 10.07.2012
Сообщений: 105

danik.js,
говорю это не главное))
Ответить с цитированием
  #10 (permalink)  
Старый 21.03.2014, 04:47
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от fAmOus
Данные примерно такие:
И откуда в этих данных возьмется набор материалов? Я вижу только набор свойств одного материала.
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построение дерева из xml файла palan ExtJS 0 10.04.2013 10:03
Парсинг из xml Vasy Общие вопросы Javascript 19 13.03.2013 17:15
Редактирование xml файла Arka1m Internet Explorer 2 26.11.2011 15:12
Парсинг XML в IE eternal AJAX и COMET 1 20.11.2011 01:25
Как узнать какие ошибки произошли при парсинге xml файла faunder Events/DOM/Window 0 12.09.2008 14:17